package string;

import java.net.SocketTimeoutException;

/*
String不适合频繁修改，内存开销大，性能低下
为了解决这个问题，JAVA提供了一个用于修改字符串的API：StringBuilder

StringBuilder内部维护一个可变的char数组，修改性能高，开销小。
并且提供了便于修改字符串的相关操作：增删改插
 */
public class StringBuilderDemo {
    public static void main(String[] args) {
        String str = "好好学习jAVA";
        //创建StringBuilder常见的构造器
        //StringBuilder builder = new StringBuilder();  内部默认表示一个空的字符串
        //创建StringBuilder的同时将给定的字符串内容复制一份到内部
        StringBuilder builder = new StringBuilder(str);
        /*
        增
        好好学习java
        V
        好好学习java,为了找个好工作！
         */
        builder.append(",为了找个好工作!");
        System.out.println(str);   //String是不变对象，内容没有发生改变
        System.out.println(builder);  //改变的是StringBuilder内部字符串内容

        /*
        修改
            好好学习java,为了找个好工作！
            V
            好好学习java,就是为了改变世界！
         */
        //替换字符串  含头不含尾
        builder.replace(9,16,"就是为了改变世界");
        System.out.println(builder);

        /*
        插入
            ,就是为了改变世界！
            V
            活着

         */
        builder.insert(0,"活着");
        System.out.println(builder);

        /*
        删除
            好好学习java,就是为了改变世界！
            V
            ,就是为了改变世界！
         */
        builder.delete(0,8);
        System.out.println(builder);

        //反转
        builder.reverse();
        System.out.println(builder);

        //StringBuilder只是修改字符串工具类，并非String本身
        //当使用StringBuilder修改内容后，可以调用toString方法得到内部字符串内容
        String aa=builder.toString();
        System.out.println(aa);
    }
}
